using System.Runtime.Serialization;
using System.Text.Json.Serialization;

namespace Acme.MeiTuan.SDK.PushRequest;

[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public class MeiTuanOrderRefundDto
{
    public string? order_id { get; set; }
    /// <summary>
    /// 通知类型，
    /// part：发起部分退款；
    /// agree：确认退款；
    /// reject：驳回退款；
    /// cancelRefund：用户取消退款申请；
    /// cancelRefundComplaint：用户取消退款申诉；
    /// 支持退货退款业务的门店，订单退款消息中notify_type和res_type字段不返回，退款状态类型请参考status字段。未开通退货退款业务的门店，订单退款保持原逻辑不变。
    /// </summary>
    public string? notify_type { get; set; }
    /// <summary>
    /// 本次退款申请的退款id，可用于商家区分多次部分退款。
    /// </summary>
    public string? refund_id { get; set; }
    /// <summary>
    /// 本次退款申请的发起时间
    /// </summary>
    public int ctime { get; set; }
    /// <summary>
    /// 申请退款的原因
    /// </summary>
    public string? reason { get; set; }
    /// <summary>
    /// 本次退款的合计金额，单位是元。
    /// </summary>
    public decimal money { get; set; }
    /// <summary>
    /// 退款状态类型，参考值：
    /// 0等待处理中；
    /// 1商家驳回退款请求；
    /// 2商家同意退款；
    /// 3客服驳回退款请求；
    /// 4客服帮商家同意退款；
    /// 5超时未处理系统自动同意；
    /// 6系统自动确认；
    /// 7用户取消退款申请；
    /// 8用户取消退款申诉。
    /// 支持退货退款业务的门店，订单退款消息中notify_type和res_type字段不返回，退款状态类型请参考status字段。未开通退货退款业务的门店，订单退款保持原逻辑不变。
    /// </summary>
    public int res_type { get; set; }
    /// <summary>
    /// 本次申请是否为用户申诉退款，参考值：0否；1是。目前部分退款不支持申诉。
    /// </summary>
    public int is_appeal { get; set; }
    /// <summary>
    /// 用户申请退款时上传的退款图片，多个图片url以英文逗号隔开，上限为9张图片。字段信息为json格式数组。
    /// </summary>
    public string? pictures { get; set; }
    /// <summary>
    /// 退款服务类型, 区分是否已开通退货退款售后业务。
    /// 未开通的场景：
    /// 0退款流程或申诉流程 已开通场景：
    /// 1仅退款流程 2退款退货流程
    /// </summary>
    public string? service_type { get; set; }
    /// <summary>
    /// 开通退货退款业务的门店，本参数推送当前售后单的状态类型，仅适用支持退货退款业务的商家：
    /// 1已申请
    /// 10初审已同意
    /// 11初审已驳回
    /// 16初审已申诉
    /// 17初审申诉已同意
    /// 18初审申诉已驳回
    /// 20终审已发起（用户已发货）
    /// 21终审已同意
    /// 22终审已驳回
    /// 26终审已申诉
    /// 27终审申诉已同意
    /// 28终审申诉已驳回
    /// 30已取消
    /// </summary>
    public string? status { get; set; }
    /// <summary>
    /// 推送当前仅退款或退货退款流程的发起方，是用户还是商家；仅适用于支持退货退款的商家。
    /// 1用户
    /// 2商家
    /// 3客服
    /// 4BD
    /// 5系统
    /// 6开放平台
    /// </summary>
    public string? apply_op_user_type { get; set; }
    /// <summary>
    /// 物流信息集合，仅适用支持退货退款业务的品类；在用户提交物流信息以及商家终审的推送消息中展示
    /// 先不做处理
    /// </summary>
    [IgnoreDataMember]
    [JsonIgnore]
    public string? logistics_info { get; set; }
    /// <summary>
    /// 订单数据状态标记。当订单中部分字段的数据因内部交互异常或网络等原因延迟生成（超时），导致开发者当前获取的订单数据不完整，此时平台对订单数据缺失情况进行标记。如不完整，建议尝试重新查询。注意，平台仅对部分模块的数据完整性进行监察标记（参考incmp_modules字段）。参考值： 1：有数据降级 0：无数据降级
    /// </summary>
    public int? incmp_code { get; set; }
    /// <summary>
    /// 有降级的数据模块的集合，参考值： 0：订单商品详情 1：订单优惠信息 2：商品优惠详情 3：订单用户会员信息 4：订单纬度的商家对账信息 5：订单纬度的商家对账信息(元) 6：订单收货人地址 7：订单配送方式 8：开放平台用户id 9：部分退款商品信息 10：退货退款物流信息 11：部分订单基本信息(包括订单优惠信息、订单商品详情、门店信息等) 12：sku信息 13：spu信息 14：商品信息(可能是sku或spu等商品相关信息获取时降级)
    /// </summary>
    [IgnoreDataMember]
    [JsonIgnore]
    public string? incmp_modules { get; set; }

    public HashSet<int>? incmp_modules_obj { get; set; }
}